我們學會了單張表的查詢與篩選,當資料需要跨表拉取時該怎麼辦呢?這時候我們就需要用到JOIN
來把表與表之間合併。
我們先來看下面這張表,這是由C.L. Moffatt 發表的 Visual Representation of SQL Joins一文中解釋何謂JOIN
所做的圖示,非常的清楚易懂。今天就讓我們來一一認識這些不同的JOIN
用法吧!
首先,先從我們最最最常用的LEFT JOIN
開始!
SELECT 欄位名1,欄位名2,欄位名3
FROM Table_A AS A
LEFT JOIN Table_B AS B
ON A.Key = B.Key;
我們要使用LEFT JOIN
,就需要將兩張表的KEY欄位找出來,也就是在這一篇中『』我們有講到關聯性資料庫的特性之一。
在上述的程式碼中我們也新學到一個用法-AS
,其作用就是可以針對表名、欄位名等做重新命名,來方便我們在程式碼的撰寫。
LEFT JOIN
又稱為左外連接,也就是針對你原本的A表,將B表有相關的資訊都補充上去,由於是以A表為主,因此B表沒有的就會以Null顯示。而與其相反的就是RIGHT JOIN
,以B表為主來查找A表的相關資料。
小孩子才做選擇,我全都要!想要連接所有的資料,你需要使用的是FULL OUTER JOIN
或是FULL JOIN
。它會包含兩張表的所有欄位,如有缺少關聯的項目,一樣會用Null顯示。
SELECT 欄位名1,欄位名2,欄位名3
FROM Table_A AS A
FULL OUTER JOIN Table_B AS B
ON A.Key = B.Key;
只想保留資料有交集的那一塊怎麼做?沒錯~使用INNER JOIN
!唯有同時滿足A表和B表的資料才會被保留下來。通常在不清楚或不熟悉資料欄位和內容的情況下,使用INNER JOIN
已經變相在過濾資料了,因此要特別小心使用!
SELECT 欄位名1,欄位名2,欄位名3
FROM Table_A AS A
INNER JOIN Table_B AS B
ON A.Key = B.Key;
上述是最常見的資料關聯方式,如果想要知道更多其他的關聯方法可以參考下方的資料學習。
接下來要進到SQL進階的部分,也就是「子查詢」的運用。
子查詢透過前2天學習的語句,加上今天學習的JOIN
,可以產生好多種變化!然後你就會發現你的query越寫越長,邏輯越來越難懂XD逐漸朝向SQL大師的道路邁進~~~
耶~努力成為SQL大師吧!我們明天見!
圖片來源:
https://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins
參考資料:
https://zh.wikipedia.org/wiki/连接
https://www.w3schools.com/sql/sql_join_inner.asp